\chapter{绪论}\label{chap:start}
\section{研究背景}\label{sec:background}
\subsection{验证码的定义}
验证码（CAPTCHA）是一种可以区分用户是机器还是人类的网络安全检测程序，
可以有效地防止黑客恶意破解用户登录密码、抢刷票、论坛灌水等侵犯用户隐私，扰乱网络正常秩序的行为。
CAPTCHA这个词最早是在2002年由卡内基梅隆大学的路易斯·冯·安、Manuel Blum、Nicholas J.Hopper以及IBM的John Langford所提出\citep{wikicaptcha}。

\subsection{验证码的分类及其识别技术的发展}

\begin{table}[!htbp]
  \bicaption{常见图形验证码分类}{Classification of common graphic verification codes}
  \centering
  \footnotesize% fontsize
  \setlength{\tabcolsep}{4pt}% column separation
  \renewcommand{\arraystretch}{1.2}%row space 
  \begin{tabular}{|c|c|c|c|}
    \hline
    序号 & 类型 & 样例                               & 特征 \\
    \hline
    1    & 可分割 & \multicolumn{1}{m{2cm}|}{\includegraphics[width=2cm]{zhengchang}} &     字符清晰,位置固定，可分割 \\
    \hline
    2    & 不可分割     & \multicolumn{1}{m{2cm}|}{\includegraphics[width=2cm]{bukefenge}} &    字符位置随机或粘连在一起，不可分割  \\
    \hline
    3    & 随机噪点     & \multicolumn{1}{m{2cm}|}{\includegraphics[width=2cm]{zaodian}} &     字符背景加入许多随机噪点 \\
    \hline
    4    & 位置偏移     & \multicolumn{1}{m{2cm}|}{\includegraphics[width=2cm]{pianyi}} &     字符位置随机偏移，不固定 \\
    \hline
    5    & 变形扭曲     & \multicolumn{1}{m{2cm}|}{\includegraphics[width=2cm]{niuqu}} &     字符形状随机扭曲变形 \\
    \hline
    6    & 字符旋转     & \multicolumn{1}{m{2cm}|}{\includegraphics[width=2cm]{xuanzhuan}} &      字符随机旋转\\
    \hline
  \end{tabular}\label{tab1}
\end{table}

从验证码的展现形式来看，现在主流的验证码大致可分为
图片验证码(表\ref{tab1})、语音验证码、短信验证码和点选验证码等几类。
其中尤以图片验证码和短信验证码为最流行，应用最广泛。

从图片验证码的发展历史上来看，最早的图片验证码是字符位置、形状、颜色固定的，无噪点和扭曲变形的简单验证码。
对于此类验证码只需通过简单的图像分割技术即可被机器轻松识别，所以此类验证码的安全性最差，目前几乎已被淘汰。

在此基础之上，下一代图像验证码则加入了随机噪点和干扰线等图像数字特征干扰技术，使验证码的安全性有了显著提高。
不过此类验证码仍然可以通过图像分割和更加复杂的图像预处理技术（诸如灰化，去线，去噪等），有效地提取到验证码的数字特征，进而被成功识别。
值得说明的是，尽管此类验证码的安全性早已漏洞百出、不堪一击，但是现在网络上仍有不少使用此类验证码技术的网站，安全性着实令人堪忧。

随着公众对互联网安全意识的进一步加强，图像验证码技术已经加入了对字符的随机位置偏移，随机颜色，随机旋转，随机字符变形扭曲等严重阻碍通用机器算法识别的技术，
从这时起的相当长的一段时期内，都没有任何一种有效且通用的验证码识别算法产生，验证码识别技术的发展似乎已经进入了寒冬，长期一蹶不振了。当然这也反映了验证码技术的安全性得到了极大的改善，网络安全得到了长足的保障。

不过好景不长，近年来随着人工智能的快速发展，尤其是深度学习算法的繁荣发展，产生了许多有效且通用的机器学习算法和工具，诸如卷积神经网络、循环神经网络、对抗生成网络等神经网络如雨后春笋般快速成长起来，
从此图像验证码将被彻底攻克，当今任何一种基于图像形式的验证码都不再安全了！

\section{本文工作}\label{sec:mywork}
\subsection{主要工作}

考虑到中文字符验证码（图\ref{fig:zhongwen}）的复杂性，本文主要研究英文字符加数字型图形验证码的几种有效识别方法。

\begin{figure}[!htbp]
  \centering
  \includegraphics[clip, width=0.40\textwidth]{zhongwen}
  \bicaption{一种复杂的中文验证码}{A complex Chinese verification code}
  \label{fig:zhongwen}
\end{figure}

对于可分割的简单图形验证码，首先对验证码进行灰化，去噪，切割等预处理流程，
然后人工抽取验证码字符的数字特征，之后将图像数据与验证码字符的数字特征进行对比，
获取各字符的相似度并进行排序来得到验证码识别结果，最终该方法可达到99\%的识别率。

对于不可分割的复杂图形验证码，本文探索使用基于卷积神经网络的深度学习方法，
通过Tensorflow深度学习框架搭建基于CNN的端到端验证码识别模型，然后使用20000个验证码数据对模型进行了3000轮左右的训练，
最终该方法在训练集上达到了100\%的识别率，在测试集上达到了97\%的识别率。

从识别率来看，这两种验证码的机器识别方法是有效的，甚至达到并超过了人眼的识别率。
其中，基于CNN的端到端验证码识别模型具有很强的泛化能力，只需更换验证码训练数据集，重新训练模型，即可解决大多数类型的验证码识别问题。

至此，我们实现了一种通用的验证码机器识别方法，可见任何图形验证码只要有足够多的训练数据集，通过深度学习方法即可轻松达到甚至超过人类的识别准确度，
所以我们断言，在深度学习算法面前，当今任何一种基于图像形式的验证码都已经不再安全了！
可喜的是，最新的点选滑动式的验证码则更加安全有效（至少目前看来是安全的），这也是当前验证码技术的一种发展趋势。
这也警示我们要不断加强网络信息安全保障技术，不断创新，进化出更加高效且安全的人机识别方法，与时俱进。

\subsection{本文内容}
本文按四章展开。

第一章，简单介绍了验证码的分类及其机器识别技术的发展历史，并说明了本文的主要工作。

第二章，基于图像的数字特征给出了一种简单有效的可分割验证码的机器识别方法，并讨论了其他有效数字特征的抽取方法。

第三章，基于深度学习的卷积神经网络（CNN），我们给出了一种通用高识别率的图形验证码识别方法，基本解决了大多数类型的图形验证码识别问题。

第四章，给出结论和进一步的工作展望。